/*******************************************************************************
 * Copyright (c) 2011 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package com.takaharabooks.mhp3rd;

import jp.co.nobot.libAdMaker.libAdMaker;

import com.admob.android.ads.AdView;

import android.app.Activity;
import android.os.Bundle;
import android.view.MenuItem;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.graphics.Color;
// text
import android.text.style.RelativeSizeSpan;
import android.text.Spanned;
import android.text.Html;
// view
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.LinearLayout;
import android.content.res.Resources;

// Dialog
import android.app.ProgressDialog;
import android.os.Handler;
import android.os.Message;
// text
import android.text.SpannableString;


public class MonsterMaterialListActivity extends Activity implements Runnable
{
	// 広告クラス
	private ConbinateAdView m_csAd;
    // DB
    private DB_ItemList m_dbItemList = null;	
	// プログレスダイアログ
	private ProgressDialog waitDialog;
	// 現在の音符位置
	private int m_nNowItemPos = 0;
	private View m_csItemListViews[];
	
	private String m_strMonsterName;

	@Override
	public void onCreate(Bundle savedInstanceState)
	{
        super.onCreate(savedInstanceState);
        setContentView(R.layout.monster_materiallist);   

        // 広告表示
        m_csAd = new ConbinateAdView( (ProgressBar)findViewById(R.id.loading2) );
        m_csAd.InitAdMaker((libAdMaker)findViewById(R.id.admakerview2), this);
        m_csAd.InitAdMob((AdView) findViewById(R.id.ad2));

        // 引数を取得
    	Bundle extras = getIntent().getExtras();
    	if (extras!=null) {
    		m_strMonsterName = (String)extras.getSerializable("NAME");
    	}
	}

    @Override
    public void onStart()
    {
    	// プログレスダイアログ
    	ShowProgressDlg();
    	
        // 処理開始
        Thread thread = new Thread(this);
        thread.start();
        
        super.onStart();
    }
    
    /*************************************
     * プログレスダイアログの表示
     **************************************/
    public void ShowProgressDlg()
    {
    	// もしまだ表示されていたら消去
    	CloseProgressDlg();	
        // 読み込み中のプログレスダイアログを表示
        waitDialog = new ProgressDialog(this);
        waitDialog.setTitle("Loading...");
        waitDialog.setMessage("データ読み込み中です。\nしばらくお待ちください...");
        waitDialog.setIndeterminate(false);
        waitDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        waitDialog.show();    	
    }

    /*************************************
     * プログレスダイアログの消去
     **************************************/
    public void CloseProgressDlg()
    {
		if(waitDialog != null && waitDialog.isShowing()){
			waitDialog.dismiss();
			waitDialog = null;
		}
    }
    
    @Override
    public void onDestroy(){
    	if( null != m_dbItemList ){
    		m_dbItemList.CloseDB();    	
    	}
    	super.onDestroy();
    }

    @Override
	public void run()
    {
        // 時間のかかる処理をここに記述。    	
        // データベースを作成
    	if( null == m_dbItemList ){
    		m_dbItemList = new DB_ItemList(this); 
    		m_dbItemList.InitDB();
    		m_dbItemList.SetDBForMonsterMaterialList(m_strMonsterName);
    	}

        handler.sendEmptyMessage(0);
    }
    
    private Handler handler = new Handler()
    {
        @Override
		public void handleMessage(Message msg)
        {
            // 処理終了時の動作をここに記述。
        	// アイテムリスト初期
        	InitItemList();
        	
        	// モンスター名を表示
        	InitMonsterName();
        	
        	CloseProgressDlg();
        }
    };    
    
    
    /**
     * メニューを作成する
     */
    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        super.onCreateOptionsMenu(menu);

        // タイトルメニューの作成
        MenuItem csMenu1 = menu.add(Menu.NONE, Menu.FIRST, Menu.NONE, "タイトルへ");
        csMenu1.setIcon(android.R.drawable.ic_menu_revert);
        MenuItem csMenu2 = menu.add(Menu.NONE, Menu.FIRST+1, Menu.NONE, "フルスクリーン");
        csMenu2.setIcon(android.R.drawable.ic_menu_view);
        
        return true;
    }
   /**
     * メニューボタン押下時の処理
     */
    @Override
    public boolean onOptionsItemSelected(MenuItem menu)
    {
        switch (menu.getItemId()) {
        case Menu.FIRST:
            //Activity終了
            finish();
            return true;
        case Menu.FIRST+1:
            //フルスクリーン処理
        	if(0 == (getWindow().getAttributes().flags & WindowManager.LayoutParams.FLAG_FULLSCREEN)){
	        	getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
	        	menu.setTitle("通常の画面");
        	}else{
                //フルスクリーンなら元に戻す
	        	getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
	        	menu.setTitle("フルスクリーン");
        	}
            return true;
        default:
            break;
        }
        
        return super.onOptionsItemSelected(menu);
    }

    public void InitMonsterName()
    {
    	TextView csText = (TextView) findViewById(R.id.MonsterNameTextView);
    	csText.setText(m_strMonsterName);
    }
    
    /*************************************
     * アイテムリストの初期化
     **************************************/
    public void InitItemList()
    {
    	Resources res = getResources();
    	LinearLayout csLayout = (LinearLayout) findViewById(R.id.ItemListLayout);
    	if(0 < csLayout.getChildCount()){
    		csLayout.removeAllViews();
    	}
    	
    	int nItemListNum = m_dbItemList.GetItemListNum(DB_ItemList.MAIN_CATEGORY_MATERIAL);
    	m_csItemListViews = new View[nItemListNum];
    	
    	// 件数表示
    	TextView strListNum = (TextView) findViewById(R.id.ListNumTextView);
        CharSequence szNum = Html.fromHtml(String.format("<font color=black>全%d件</font>", nItemListNum));
    	strListNum.setText(szNum);

    	for(int nNum=0; nNum<nItemListNum; nNum++)
    	{
    		String strName = m_dbItemList.GetItemNameStr(nNum);
            // 色変更    		
            CharSequence source = Html.fromHtml("<font color=black>" + strName + "</font>");
            
            // リサイズ
            SpannableString spannable = new SpannableString(source);
            RelativeSizeSpan spanResize = new RelativeSizeSpan(1.2f); 
            spannable.setSpan(spanResize, 0, strName.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);		

    		
    		TextView csView = new TextView(this);
	    	csView.setText(spannable);
	    	csView.setLayoutParams(csLayout.getLayoutParams());
	    	csView.setBackgroundDrawable(res.getDrawable(R.drawable.frame01));
	    	csLayout.addView(csView,
	    			new LinearLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, 
	    										  ViewGroup.LayoutParams.WRAP_CONTENT));
	    	m_csItemListViews[nNum] = csView;
	    	
	    	// 現在表示中の値を変更
	    	m_nNowItemPos = nNum;
	    	
	    	// クリックされたときの動作を定義
	    	csView.setOnClickListener(new View.OnClickListener(){
	        	Resources res = getResources();
	    		private int m_nNum = m_nNowItemPos;
	    		@Override
	    		public void onClick(View v){
	    			m_csItemListViews[m_nNowItemPos].setBackgroundDrawable(res.getDrawable(R.drawable.frame01));
	    			m_nNowItemPos = m_nNum;
	    			InitItemDescription(m_nNum);
	    			m_csItemListViews[m_nNum].setBackgroundDrawable(res.getDrawable(R.drawable.frame01));
	    			m_csItemListViews[m_nNum].setBackgroundColor(Color.GRAY);
	    			//m_csWhistleViews[m_nNum].setBackgroundColor(Color.argb(0xa0, 0xcc, 0xcc, 0xcc));
	    		}
	    	});
    	}

    	// 初期化
    	m_nNowItemPos = 0;  
    	InitItemDescription(0);
    	m_csItemListViews[0].setBackgroundColor(Color.GRAY);
    }


    /*************************************
     * アイテム説明の初期化
     **************************************/
    public void InitItemDescription(int nIndex)
    {
    	LinearLayout csLayout = (LinearLayout) findViewById(R.id.ItemListDescLayout);
    	csLayout.removeAllViews();

    	// 説明文取得
		String strHtml = "";
		// 素材リストの説明文
		strHtml = GetMaterialDescription(nIndex);
		
        // 色変更
        CharSequence source = Html.fromHtml(strHtml);
        
        // リサイズ
        SpannableString spannable = new SpannableString(source);
        //RelativeSizeSpan spanResize = new RelativeSizeSpan(1.5f); 
        //spannable.setSpan(spanResize, 0, 7, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);		

		
		TextView csView = new TextView(this);
    	csView.setText(spannable);
    	csView.setLayoutParams(csLayout.getLayoutParams());

    	csLayout.addView(csView,
    			new LinearLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, 
    										  ViewGroup.LayoutParams.WRAP_CONTENT));
    }
    
     /*************************************
     * 素材の説明を取得
     **************************************/
    private String GetMaterialDescription(int nIndex)
    {
		String strItemName = m_dbItemList.GetItemNameStr(nIndex);
		int nItemRare = m_dbItemList.GetItemRareNum(nIndex);
		int nItemHave = m_dbItemList.GetItemMaxHandNum(nIndex);
		int nItemBuyPrice = m_dbItemList.GetItemBuyPriceNum(nIndex);
		int nItemSalePrice = m_dbItemList.GetItemSalePriceNum(nIndex);
		String strItemEffect = m_dbItemList.GetItemEffectStr(nIndex);
		int nItemGetNum = m_dbItemList.GetItemGetNum(nIndex);
		String strItemGetPoint = m_dbItemList.GetItemGetPointStr(nIndex);
		String strItemGetRank = m_dbItemList.GetItemGetRankStr(nIndex);
		
		String strHtml = "";
		strHtml += "<font color=white><B>" + strItemName + "</B></font><br>";
		strHtml += "【レア度】　　 <br><B>" + MakeItemRareString(nItemRare) + "</B><br>";
		strHtml += "【最大所持数】 <br><B><font color=white>" + MakeItemHave(nItemHave) + "</font></B><br>";
		strHtml += "【買値】　　　 <br><B><font color=blue>" + MakeItemPrice(nItemBuyPrice) + "</font></B><br>";
		strHtml += "【売値】　　　 <br><B><font color=red>" + MakeItemPrice(nItemSalePrice) + "</font></B><br>";
		strHtml += "【入手個数】<br><B><font color=black>" + MakeItemPrice(nItemGetNum) + "</font></B><br>";
		strHtml += "【入手方法】<br><B><font color=black>" + strItemGetPoint + "</font></B><br>";
		strHtml += "【入手ランク】<br><B><font color=black>" + strItemGetRank + "</font></B><br>";
		strHtml += "【入手場所＆ﾓﾝｽﾀｰ】<br><B><font color=black>" + strItemEffect + "</font></B><br>";
		strHtml += "<br> ";
    	
		return strHtml;
    }
    
    /*************************************
     * 最大所持数を表示する文字列を取得（100を∞に変更）
     **************************************/
    private String MakeItemHave(int nNum)
    {
    	String strRt = "";
    	if(100 == nNum)		{	strRt = "∞";		}
    	else if(-1 == nNum)	{	strRt = "";			}
    	else				{	strRt = "" + nNum;  } 	
    	return strRt;
    }
    
    /*************************************
     * 価格を表示する文字列を取得（-1を空に変更）
     **************************************/
    private String MakeItemPrice(int nPrice)
    {
    	String strRt = "";
    	if(-1 == nPrice)	{	strRt = "";				}
    	else				{	strRt = "" + nPrice;	} 	
    	return strRt;
    }
    
    /*************************************
     * レア度を表示する文字列を変えす（色変え）
     **************************************/
    private String MakeItemRareString(int nRare)
    {
    	String strRare = "";
    	
    	switch(nRare){
    	case 1:		// 白
    		strRare = "<font color=white>" + nRare + "</font>";
    		break;
    	case 2:		// 紫
    		strRare = "<font color=#cc2288>" + nRare + "</font>";
    		break;
    	case 3:		// 黄色
    		strRare = "<font color=yellow>" + nRare + "</font>";
    		break;
    	case 4:		// ピンク
    		strRare = "<font color=#ff00ff>" + nRare + "</font>";
    		break;
    	case 5:		// 緑
    		strRare = "<font color=#44ff44>" + nRare + "</font>";
    		break;
    	case 6:		// 藍色
    		strRare = "<font color=#0033dd>" + nRare + "</font>";
    		break;
    	case 7:		// 赤
    		strRare = "<font color=red>" + nRare + "</font>";
    		break;
    	default:
    		break;
    	}
    	
    	return strRare;
    }
        
}